package com.kuang.bascic.utils;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.kuang.bascic.config.AlipayConfig;
import com.kuang.order.domain.Paybill;
import com.kuang.pay.domian.AlipayInfo;
public class AlipayUtils {
    public static String alipay(Paybill paybill, AlipayInfo alipayInfo){
        String result = null;
        try {
            //获得初始化的AlipayClient
            AlipayClient alipayClient = new DefaultAlipayClient(
 //(String serverUrl, String appId, String privateKey, String format, String charset, String alipayPublicKey, String signType
                    AlipayConfig.gatewayUrl,
//                    AlipayConfig.app_id,
                    alipayInfo.getAppid(),
//                    AlipayConfig.merchant_private_key, "json",
                    alipayInfo.getMerchant_private_key(),"json",
                    AlipayConfig.charset,
//                    AlipayConfig.alipay_public_key,.
                    alipayInfo.getAlipay_public_key(),
                    AlipayConfig.sign_type
            );

            //设置请求参数
            AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
            alipayRequest.setReturnUrl(AlipayConfig.return_url);
            alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
            //商户订单号，商户网站订单系统中唯一订单号，必填
            //new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8") jsp最原始sevlet获取值
            //取到，作用域里获取参数，从iso标准字符获取，以utf-8进行编码
            String out_trade_no =paybill.getOrderSn();
            //付款金额，必填 new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8")
            String total_amount = paybill.getMoney().toString();
            //订单名称，必填new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8")
            String subject = paybill.getDigest() ;
            //商品描述，可空new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8")
            String body = paybill.getDigest();

            alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                    + "\"total_amount\":\""+ total_amount +"\","
                    + "\"subject\":\""+ subject +"\","
                    + "\"body\":\""+ body +"\","
                    + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

            //若想给BizContent增加其他可选请求参数，以增加自定义超时时间参数timeout_express来举例说明
            //alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
            //		+ "\"total_amount\":\""+ total_amount +"\","
            //		+ "\"subject\":\""+ subject +"\","
            //		+ "\"body\":\""+ body +"\","
            //		+ "\"timeout_express\":\"10m\","
            //		+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
            //请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节

            //请求
            result = alipayClient.pageExecute(alipayRequest).getBody();
        } catch (AlipayApiException e) {
            throw new RuntimeException(e);
        }

        //输出
//        out.println(result);
        //返回请求回去
        return result;
    }
}
